<?php

class Generales_ArchivoController extends Zend_Controller_Action {
	
	private $ruta_archivos;
	
	public function init() {
		parent::init();
		$appConfig = Zend_Registry::get('appConfig');
//		$targetPath = $_SERVER['DOCUMENT_ROOT'].$this->view->baseUrl('uploads');
		$targetPath = $appConfig->get("ruta_archivos");
		$this->ruta_archivos = str_replace('//', '/', $targetPath);
	}

	public function uploadAction() {
		$this->_helper->layout->disableLayout();
		//$this->getHelper('viewRenderer')->setNoRender();
		//$this->view->priorityMessenger("Mensaje","info");
		if (! empty ( $_FILES )) {
			$tempFile = $_FILES['Filedata']['tmp_name'];
			$originalFileName = $_FILES['Filedata']['name'];
			$ext = pathinfo( $_FILES['Filedata']['name'], PATHINFO_EXTENSION );
			$newFileName = md5( uniqid() . $_FILES['Filedata']['name'] ).".{$ext}";
			
			//$targetPath = $_SERVER['DOCUMENT_ROOT'].$_REQUEST['folder'] . '/';
			$targetFile = $this->ruta_archivos."/{$newFileName}";
//			$targetFile = str_replace('//', '/', $targetPath).$_FILES['Filedata']['name'];
			
			
			// $fileTypes  = str_replace('*.','',$_REQUEST['fileext']);
			// $fileTypes  = str_replace(';','|',$fileTypes);
			// $typesArray = split('\|',$fileTypes);
			// $fileParts  = pathinfo($_FILES['Filedata']['name']);
			
		
			// if (in_array($fileParts['extension'],$typesArray)) {
			// Uncomment the following line if you want to make the directory if it doesn't exist
			// mkdir(str_replace('//','/',$targetPath), 0755, true);
			
		
			move_uploaded_file( $tempFile, $targetFile );
			$msg="";
			switch ($_FILES['Filedata']['error']) {
				case 0 :
					//$msg = "No Error"; // comment this out if you don't want a message to appear on success.
					break;
				case 1 :
					$msg = "El archivo es más grande que lo que esta instalación de PHP permite";
					break;
				case 2 :
					$msg = "El archivo es más grande que lo que permite este formulario";
					break;
				case 3 :
					$msg = "El archivo fue cargado solo parcialmente";
					break;
				case 4 :
					$msg = "El archivo no fue cargado al servidor";
					break;
				case 6 :
					$msg = "No se encuentra la carpeta temporal del sistema";
					break;
				case 7 :
					$msg = "Fallo al escribir el archivo al disco duro";
					break;
				case 8 :
					$msg = "Alguna extensión detuvo el cargue del archivo";
					break;
				default :
					$msg = "Desconocido: " . $_FILES['Filedata']['error'];
					break;
			}
			
			if ($msg) {
				$stringData = "Error: ".$msg;
			} else {
				$evento = $this->_getParam("evento");
				switch ($evento) {
					case "ACTA_SESION":
						$codsesion = $this->_getParam("cs");
						$codusuario = $this->_getParam("cu");
						$detalleSesion = new Salas_Model_DetalleSesion();
						try {
							$detalleSesion->guardarActa($codsesion, $codusuario, $originalFileName, $newFileName);
							$stringData = "El archivo se ha guardado correctamente.";
						} catch(Exception $e) {
							$stringData = "Error: ".$e->getMessage();
						}
					break;
					
					default:
						@unlink($targetFile);
						$stringData="Error: No existe un evento asociado al archivo cargado, por lo tanto se ha eliminado.";
				}
				
			}
			//echo $stringData;
			$this->view->stringData = $stringData;
		
		}

	}//fin de uploadAction
	
	public function downloadAction() {
		
		$file="";
		$archivo = $this->_getParam("archivo");
		$evento = $this->_getParam("evento");
		switch ($evento) {
			case "ACTA_SESION":
				$detalleSesion = new Salas_Model_DetalleSesion();
				$datos = $detalleSesion->getActaByNombre($archivo);
				//Zend_Debug::dump($datos);
				if($datos !== false) {
					$file = $this->ruta_archivos."/{$datos['nombrecodificado']}";
				}
			 break;
		     case "ADJUNTO_SINTESIS":
		     case "ADJUNTO_AGENDA":
				$Adjunto = new Generales_Model_Documentos();
				$datos = $Adjunto->getDocumentoByNombre($archivo);
				//Zend_Debug::dump($datos);
				if($datos !== false) {
					$file = $this->ruta_archivos."/{$datos['nombrecodificado']}";
				}
			break;
			case "PLANTILLAS":
			    $targetPath = $_SERVER['DOCUMENT_ROOT'].$this->view->baseUrl('plantillas');
		        $ruta_archivos = str_replace('//', '/', $targetPath);
		        if (in_array($archivo,array(1,2,10))){
		            $datos['nombrereal'] = "plantilla{$archivo}.doc";
			        $file = $ruta_archivos."/plantilla{$archivo}.doc";
		        }else{
		            $datos['nombrereal'] = "plantilla{$archivo}.xls";
			        $file = $ruta_archivos."/plantilla{$archivo}.xls";
		        }
			break;
			case "ADJUNTOS_MIGRACION":
				$appConfig = Zend_Registry::get('appConfig');
				$targetPath = $appConfig->get("ruta_migracion");
				$ruta_archivos = str_replace('//', '/', $targetPath);
			    
				$archivo = str_replace("@","/",$archivo);
		        $datos['nombrereal'] = $archivo;
		        $file = $ruta_archivos."/{$archivo}";
			break;
			case "PLANTILLAS_WORD":
				$appConfig = Zend_Registry::get('appConfig');
				$targetPath = $appConfig->get("ruta_plantillas")."/documentos/";
				$ruta_archivos = str_replace('//', '/', $targetPath);
			    
		        $datos['nombrereal'] = $archivo;
		        $file = $ruta_archivos."/{$archivo}";
			break;
		}
		
//		Zend_Debug::dump($file);
//		$file="";
		if(!empty($file) && file_exists($file)) {
			$this->_helper->layout->disableLayout();
			$this->_helper->viewRenderer->setNoRender(true);
			$this->getResponse()->clearBody();
			$this->getResponse()->clearAllHeaders();
			$this->getResponse()
			     ->setHeader('Content-Description', 'File Transfer')
			     ->setHeader('Content-Type', App_Util_Archivo::getTipoMime($file))
			     ->setHeader('Content-Disposition', 'attachment; filename="'.$datos['nombrereal'].'"')
			     ->setHeader('Content-Transfer-Encoding', 'binary')
			     ->setHeader('Expires', '0')
			     ->setHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0')
			     ->setHeader('Pragma', 'public')
			     ->setHeader('Content-Length', @filesize($file));
			
			readfile($file);
			//exit;
		}
	}
	
	public function imageAction() {
	    $filepath = $this->ruta_archivos."/".$this->_getParam("file");
	    $this->_helper->layout->disableLayout();
	    $this->_helper->viewRenderer->setNoRender(true);
			$this->getResponse()->clearBody();
			$this->getResponse()->clearAllHeaders();
			$this->getResponse()
			     ->setHeader('Content-Type', App_Util_Archivo::getTipoMime($filepath))
			     ->setHeader('Content-Transfer-Encoding', 'binary')
			     ->setHeader('Content-Length', @filesize($filepath));
	    readfile($filepath);
	}
}//fin de la clase
